Utilisation des listes

Les listes sont des objets qui possède un certain nombre de méthodes permettant la modification qu'il est utile de connaître pour en faire une bonne utilisation.

IModification de listes

Les méthodes ne sont pas des fonctions. Une méthode à pour vocation de modifier un objet. Par exemple la fonction len(L) est une fonction calculant la longueur d'une liste. La syntaxe pour exécuter une méthode est la suivante :
objet.methode(arguments)
La méthode de methode modifie l'objet objet sans le détruire. A ne pas confondre avec une affectation :
objet = fonction(arguments)
Avec l'affectation, si l'objet existait déjà, il est détruit puis recréé.

Voici quelques méthodes utiles permettant de modifier une liste L :

Dans la console, créer la liste L=[1.2, 'z','A','a', 77, [] ,'a', 0, 1] . Dans l'ordren effectuer les opérations suivantes :
  • Retirer le premier élément
  • Retirer le premier élément valant "a"
  • Inverser l'ordre de la liste.
  • Ajouter à la fin, la valeur 9000
  • Retirer le dernier élément.
  • Tester si la liste contient 1.2
  • Lui concaténer une autre liste.

IIDamier

Un damier de taille \(N \times N\) est représenté par une liste de \(N\) listes de longueurs \(N\). Une valeur de 1 indique la présence d'un pion et 0 son absence. Par exemple, pour \(N = 4\), le damier ci dessous peut-être représenté par une liste de liste (autrement dit une matrice) : $$ D = [\ [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 1, 0]\ ] $$
Créer un nouveau fichier appelé dames.py. Commencer par affecter à une variable G une liste représentant le graphe de l'exemple ci-dessus.
  • Ecrire une fonction nombre_pions(D) qui prend un damier D (une matrice) en argument et qui retourne un entier valant le nombre de pions présents sur le damier en variable de sortie. Cette fonction devra marcher pour des damiers de taille quelconque.
  • Ecrire une fonction nombre_pions_bord(D) qui compte le nombre de pions sur un bord.
  • Penser à affecter la largeur du damier à N (utiliser len )
  • Pour parcourir une ligne, il faut faire une boucle sur i allant de \(0\) à \(N-1\)
  • Pour parcourir chaque case il faut parcourir chaque colonne, à chaque fois que l'on parcoure une ligne...
Il faut utiliser une double boucle :

for i in range(0,N):
     for j in range(0,N):
        print(D[i][j]) #affiche le contenu de la case [i,j]

Ecrire une fonction nouvelle_partie(N) qui prend un entier N (représentant la largeur du damier) en argument et qui retourne un damier sur lequel sont placés les pions noirs (1) et blancs (2) en position de départ (voir l'image). On placera 4 lignes pour chaque pion en prenant soin de sauter une case sur deux. Si \(N\) est inférieur à 10... avisez !

Nous avons vu dans la page sur la portée des variables qu'une fonction ne pouvait modifier une variable déclarée hors de celle-ci qu'en la déclarant globale (revoir la page ne question si ce n'est pas clair). Mais comme les listes sont définies par références, si nous modifions D (qui est une liste) dans une fonction, D sera bien modifié à l'extérieur de celle-ci.

Ecrire une fonction bouge(D,i,j,direction) qui prend en argument un damier D , les position i et j d'une case sur le damier, et direction un entier valant -1 (pour aller gauche) ou 1 (pour aller à droite) en arguments. La fonction modifie et retourne le damier D tel que :
  • Si il n'y a pas de pion en [i,j], il ne se passe rien.
  • Si il y a un pion blanc, il monte, si il y a un pion noir, il descend.
  • Si un pion est en bout de damier, il ne peut pas bouger (on ne programme pas encore les dames)
  • Si un pion est face à un pion adverse, il peut le manger si il peut sauter par dessus